Skip to content

deps: enable OpenSSL asm support for riscv64#62606

Open
JamieMagee wants to merge 1 commit intonodejs:mainfrom
JamieMagee:riscv64-openssl-asm
Open

deps: enable OpenSSL asm support for riscv64#62606
JamieMagee wants to merge 1 commit intonodejs:mainfrom
JamieMagee:riscv64-openssl-asm

Conversation

@JamieMagee
Copy link
Copy Markdown
Contributor

When riscv64 was added to the OpenSSL config in 2021 (#40063), OpenSSL had no RISC-V assembly at all, so it went into NO_ASM_ARCHS. OpenSSL 3.5.x now has perlasm generators for AES, SHA-256/512, GHASH/GCM, ChaCha, SM3, SM4, and CPUID. All with runtime extension detection via riscvcap.c and the Linux hwprobe syscall, so there's no risk on hardware without the crypto extensions.

This moves linux64-riscv64 from NO_ASM_ARCHS to ASM_ARCHS in deps/openssl/config/Makefile, regenerates the config (adding asm/ and asm_avx2/ variants with 16 generated assembly files each), and adds riscv64 entries to the six gypi selector files.

Generated with nix shell nixpkgs#nasm -c make linux64-riscv64 in deps/openssl/config/.

Refs: nodejs/build#4099

@nodejs-github-bot
Copy link
Copy Markdown
Collaborator

Review requested:

  • @nodejs/security-wg

@nodejs-github-bot nodejs-github-bot added dependencies Pull requests that update a dependency file. needs-ci PRs that need a full CI run. openssl Issues and PRs related to the OpenSSL dependency. labels Apr 5, 2026
@sxa
Copy link
Copy Markdown
Member

sxa commented Apr 9, 2026

Have just spent a lot of today trying to unbreak my cross-compile environment but it's now working again. Will do some tests with this (natively and with the cross-compile) and see how it goes but this will be great if we can enable the assembly stuff now.

@kxxt
Copy link
Copy Markdown
Member

kxxt commented Apr 10, 2026

I encountered a strange OpenSSL compilation problem where it appears that the build system incorrectly fall-backs to x86_64 asm for a native riscv64 build: https://github.com/riscv-forks/node-riscv/actions/runs/24225505014/job/70735319923

I will give this PR a try in my new experimental CI system for riscv64: riscv-forks/node-riscv#1

@sxa
Copy link
Copy Markdown
Member

sxa commented Apr 10, 2026

I encountered a strange OpenSSL compilation problem where it appears that the build system incorrectly fall-backs to x86_64 asm for a native riscv64 build: https://github.com/riscv-forks/node-riscv/actions/runs/24225505014/job/70735319923

I will give this PR a try in my new experimental CI system for riscv64: riscv-forks/node-riscv#1

FYI I initially hit that as well when I hadn't included the --dest-cpu=riscv64 in the configure command when cross compiling (I typically run with CC and CXX set to clang with the appropriate --target and -march flags)

@kxxt
Copy link
Copy Markdown
Member

kxxt commented Apr 10, 2026

I encountered a strange OpenSSL compilation problem where it appears that the build system incorrectly fall-backs to x86_64 asm for a native riscv64 build: https://github.com/riscv-forks/node-riscv/actions/runs/24225505014/job/70735319923
I will give this PR a try in my new experimental CI system for riscv64: riscv-forks/node-riscv#1

FYI I initially hit that as well when I hadn't included the --dest-cpu=riscv64 in the configure command when cross compiling (I typically run with CC and CXX set to clang with the appropriate --target and -march flags)

Yeah, that might be expected in a cross-compilation setup. But I find it surprising because I am compiling natively on riscv64.

@panva
Copy link
Copy Markdown
Member

panva commented Apr 10, 2026

note: #62629 just landed with OpenSSL update to 3.5.6

@sxa
Copy link
Copy Markdown
Member

sxa commented Apr 10, 2026

Yeah, that might be expected in a cross-compilation setup. But I find it surprising because I am compiling natively on riscv64.

Interesting - my native build (clang21 with -march=rv64gc) seemed to go ok from this branch.

@JamieMagee JamieMagee force-pushed the riscv64-openssl-asm branch from 428839b to 3359202 Compare April 10, 2026 18:19
@JamieMagee
Copy link
Copy Markdown
Contributor Author

note: #62629 just landed with OpenSSL update to 3.5.6

Rebased on top of main and regenerated the riscv64 configs for 3.5.6.

@JamieMagee JamieMagee force-pushed the riscv64-openssl-asm branch from 3359202 to 9ad173a Compare April 21, 2026 06:18
Copy link
Copy Markdown
Member

@kxxt kxxt left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Could you also update the GN build recipe to add linux64-riscv64 ?

} else if (is_linux) {
if (current_cpu == "x86") {
config_path_name = "linux-elf"
} else if (current_cpu == "x64") {
config_path_name = "linux-x86_64"
} else if (current_cpu == "arm") {
config_path_name = "linux-armv4"
} else if (current_cpu == "arm64") {
config_path_name = "linux-aarch64"
}
} else if (is_apple) {

I am preparing patches to enable GN built Node.js for riscv64 and this would be necessary.

Move linux64-riscv64 from NO_ASM_ARCHS to ASM_ARCHS in the OpenSSL
config Makefile and regenerate the configuration. This adds asm/ and
asm_avx2/ config variants alongside the existing no-asm/ variant.

When riscv64 was first added to the OpenSSL config in 2021 (nodejs#40063),
OpenSSL had no RISC-V assembly support. OpenSSL 3.5.x now ships 17
perlasm generators covering AES (zvkned, zvkb, zkn), SHA-256/512
(zvknha, zvknhb), GHASH/GCM (zvkg, zvbc), ChaCha (v, zbb), SM3
(zvksh), SM4 (zvksed), and CPUID detection. Runtime capability
detection via riscvcap.c and the Linux hwprobe syscall ensures safe
fallback to generic C code on hardware without these extensions.

Also add riscv64 entries to the six asm gypi selector files:
openssl_asm.gypi, openssl_asm_avx2.gypi, openssl-cl_asm.gypi,
openssl-cl_asm_avx2.gypi, openssl-fips_asm.gypi, and
openssl-fips_asm_avx2.gypi.

Refs: nodejs/build#4099
Signed-off-by: Jamie Magee <jamie.magee@gmail.com>
@JamieMagee JamieMagee force-pushed the riscv64-openssl-asm branch from 9ad173a to 5ea800d Compare April 21, 2026 15:29
@JamieMagee
Copy link
Copy Markdown
Contributor Author

@kxxt Done, added linux64-riscv64 to unofficial.gni. Thanks for the heads up.

@JamieMagee JamieMagee requested a review from kxxt April 21, 2026 15:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file. needs-ci PRs that need a full CI run. openssl Issues and PRs related to the OpenSSL dependency.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants